@using [Owner].[Module].Services
@using [Owner].[Module].Models

@namespace [Owner].[Module]
@inherits ModuleBase
@inject I[Module]Service [Module]Service
@inject NavigationManager NavigationManager

@if (_[Module]s == null)
{
    <p><em>Loading...</em></p>
}
else
{
    <ActionLink Action="Add" Security="SecurityAccessLevel.Edit" Text="Add [Module]" />
    <br />
    <br />
    @if (@_[Module]s.Count != 0)
    {
        <Pager Items="@_[Module]s">
            <Header>
                <th style="width: 1px;">&nbsp;</th>
                <th style="width: 1px;">&nbsp;</th>
                <th>Name</th>
            </Header>
            <Row>
                <td><ActionLink Action="Edit" Parameters="@($"id=" + context.[Module]Id.ToString())" /></td>
                <td><ActionDialog Header="Delete [Module]" Message="@("Are You Sure You Wish To Delete The " + context.Name + " [Module]?")" Action="Delete" Security="SecurityAccessLevel.Edit" Class="btn btn-danger" OnClick="@(async () => await Delete(context))" /></td>
                <td>@context.Name</td>
            </Row>
        </Pager>
    }
    else
    {
        <p>No [Module]s To Display</p>
    }
}

<!-- The content below is for informational purposes only and can be safely removed -->

<hr />
[Module] Module Created Successfully. Use Edit Mode To Add A [Module]. You Can Access The Files At The Following Locations:<br /><br />
[RootPath]Oqtane.Client\Modules\[Module]\<br />
- Edit.razor - component for adding or editing content<br />
- Index.razor - main component for your module **the content you are reading is in this file**<br />
- ModuleInfo.cs - implements IModule interface to provide configuration settings for your module<br />
- Settings.razor - component for managing module settings<br />
- Services\I[Module]Service.cs - interface for defining service API methods<br />
- Services\[Module]Service.cs - implements service API interface methods<br /><br />
[RootPath]Oqtane.Server\Modules\[Module]\<br />
- Controllers\[Module]Controller.cs - API methods implemented using a REST pattern<br />
- Manager\[Module]Manager.cs - implements optional module interfaces for features such as import/export of content<br />
- Repository\I[Module]Repository.cs - interface for defining repository methods<br />
- Repository\[Module]Respository.cs - implements repository interface methods for data access using EF Core<br />
- Repository\[Module]Context.cs - provides a DB Context for data access<br />
- Scripts\[Owner].[Module]s.1.0.0.sql - database schema definition script<br />
- Scripts\[Owner].[Module]s.Uninstall.sql - database uninstall script<br /><br />
[RootPath]Oqtane.Shared\Modules\[Module]\<br />
- Models\[Module].cs - model definition<br /><br />

<!-- The content above is for informational purposes only and can be safely removed -->

@code {
    public override List<Resource> Resources => new List<Resource>()
    {
        new Resource { ResourceType = ResourceType.Stylesheet, Url = ModulePath() + "Module.css" },
        new Resource { ResourceType = ResourceType.Script, Url = ModulePath() + "Module.js" }
    };

    List<[Module]> _[Module]s;

    protected override async Task OnInitializedAsync()
    {
        try
        {
            _[Module]s = await [Module]Service.Get[Module]sAsync(ModuleState.ModuleId);
        }
        catch (Exception ex)
        {
            await logger.LogError(ex, "Error Loading [Module] {Error}", ex.Message);
            AddModuleMessage("Error Loading [Module]", MessageType.Error);
        }
    }

    private async Task Delete([Module] [Module])
    {
        try
        {
            await [Module]Service.Delete[Module]Async([Module].[Module]Id, ModuleState.ModuleId);
            await logger.LogInformation("[Module] Deleted {[Module]}", [Module]);
            _[Module]s = await [Module]Service.Get[Module]sAsync(ModuleState.ModuleId);
            StateHasChanged();
        }
        catch (Exception ex)
        {
            await logger.LogError(ex, "Error Deleting [Module] {[Module]} {Error}", [Module], ex.Message);
            AddModuleMessage("Error Deleting [Module]", MessageType.Error);
        }
    }
}